home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 1.iso
/
ARGONET
/
PD
/
PROGRAMMING
/
DESKLIBC
/
SOURCES.ZIP
/
DeskLib
/
!DLSources
/
Libraries
/
Pane2
/
c
/
AddPane
< prev
next >
Wrap
Text File
|
1995-08-23
|
4KB
|
124 lines
/*
#### # # # #
# # # # # The FreeWare C library for
# # ## ### # # # # ### RISC OS machines
# # # # # # # # # # # ___________________________________
# # #### ### ## # # # #
# # # # # # # # # # Please refer to the accompanying
#### ### #### # # ##### # ### documentation for conditions of use
________________________________________________________________________
File: Pane2.AddPane.c
Author: Copyright © 1995 Andrew Sellors.
Version: 1.04 (4th August 1995)
Purpose: Handles windows with panes.
*/
#include "DeskLib:Pane2.h"
#include "Pane2Defs.h"
#include "Desklib:Event.h"
#include "DeskLib:Template.h"
#include "Desklib:EventMsg.h"
#include "Desklib:Error.h"
#include <stdlib.h>
/******************************************************************************/
extern BOOL Pane2_AddPane(window_handle mainwindow, window_handle panewindow,
wimp_point *paneoffset, wimp_point *panesize, int flags)
{
/*
* Adds the pane window 'panewindow' to the main window 'mainwindow'.
* If 'paneoffset' is not NULL then this is taken as the offset between the
* pane and the main window instead of the positions in the template.
* If 'panesize' is not NULL then this is taken as the size of the pane
* instead of the size in the template.
*/
main_listelement *mainelement;
pane_listelement *paneelement;
window_state mainstate;
window_state panestate;
/*
* find element for main window and return FALSE if mainwindow not present
*/
mainelement = FindMainWindow(mainwindow);
if(mainelement == NULL)
return(FALSE); /* not found */
/*
* malloc memory for list element and return FALSE if fails
*/
paneelement = malloc(sizeof(pane_listelement));
if(paneelement == NULL)
return(FALSE); /* failed */
/*
* get info about main and pane windows
*/
Wimp_GetWindowState(mainwindow, &mainstate);
Wimp_GetWindowState(panewindow, &panestate);
/*
* initialise list header
*/
LinkList_Init(&(paneelement->header));
/*
* fill element
*/
paneelement->panewindow = panewindow;
paneelement->mainwindow = mainwindow;
paneelement->paneflags.value = flags;
if(paneoffset != NULL) /* if pane offset is provided */
paneelement->paneoffset = *paneoffset;
else{ /* use template pane offset */
paneelement->paneoffset.x = panestate.openblock.screenrect.min.x -
mainstate.openblock.screenrect.min.x;
if(paneelement->paneflags.data.maintop) /* pane fixed to top of window */
paneelement->paneoffset.y = mainstate.openblock.screenrect.max.y;
else /* pane fixed to bottom of window */
paneelement->paneoffset.y = mainstate.openblock.screenrect.min.y;
if(paneelement->paneflags.data.panetop) /* pane fixed using top of pane */
paneelement->paneoffset.y -= panestate.openblock.screenrect.max.y;
else /* pane fixed using bottom of pane */
paneelement->paneoffset.y -= panestate.openblock.screenrect.min.y;
}
if(panesize != NULL) /* if pane size is provided */
paneelement->panesize = *panesize;
else{ /* use template pane size */
paneelement->panesize.x = panestate.openblock.screenrect.max.x -
panestate.openblock.screenrect.min.x;
paneelement->panesize.y = panestate.openblock.screenrect.max.y -
panestate.openblock.screenrect.min.y;
}
/*
* add list element to end of list
*/
LinkList_AddToTail(&(mainelement->paneanchor), &(paneelement->header));
/*
* install open window event handler for pane window if it is !ArtWorks style
*/
if(!paneelement->paneflags.data.fixed)
Event_Claim(event_OPEN, panewindow, event_ANY, PaneOpenEventHandler, paneelement);
return(TRUE);
}